package com.wn.controller;

import com.wn.bean.Building;
import com.wn.bean.PageVo;
import com.wn.bean.Result;
import com.wn.exception.BuildDeleteException;
import com.wn.service.IBuildingService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author yellow Docter
 * @date 2024-06-27
 * @desc 蜗牛创想：www.woniuxy.com
 *
 *    依赖注入
 *       创建对象的过程交给spring容器
 *       BuildingController、IBuildingService 对象的创建  交给了spring
 *        private IBuildingService iBuildingService  这个的属性的初始化 给了spring
 *             依赖spring的管理 进行 属性注入
 *
 */
@RestController                     // 创建一个对象 添加到IOC容器中
//  请求的url 和 处理请求的方法进行绑定的注解  如果用在类上面 就是下面的所有的方法都需要带这个url
@RequestMapping("building")
public class BuildingController {

    //把 IOC 容器中的 service 对象注入进来
    @Autowired
    private IBuildingService iBuildingService;

    /**
     * 前端页面发送的数据:
     *    /building/page/${this.currentPage}/${this.pageSize} 参数在url上面
     *
     * @return  返回结果 给前端展示数据
     */
    @ApiOperation("分页的方法")
    @GetMapping("/page/{currentPage}/{pageSize}")
    public Result<PageVo> pageBuild(@PathVariable("currentPage") int currentPage,
                                    @PathVariable("pageSize") int pageSize){
        //返回的数据 通过 Result 包裹、统一给前端
        return Result.ok(iBuildingService.pageBuild(currentPage,pageSize));

    }

    // get 请求   查询所有
    @GetMapping("/list")
    public Result<List<Building>> listBuilds(){
        return Result.ok(iBuildingService.listAll());
    }

    // 添加操作     @RequestBody  获取数据、把json对象转成 javabean直接接受数据
    @PostMapping
    public Result<String> addBuilding(@RequestBody Building building){
        boolean flag = iBuildingService.addBuilding(building);
        return flag ? Result.ok() : Result.fail();
    }

    //修改操作     @RequestBody  获取数据、把json对象转成 javabean直接接受数据
    @PutMapping
    public Result<String> updateBuildingById(@RequestBody Building building){
        boolean flag = iBuildingService.updateBuildingById(building);
        return flag ? Result.ok() : Result.fail();
    }

    /**
     *  发送数据的请求的url:
                http://localhost:8090/building/10
         请求方式: DELETE
     * @param id
     * @return
     */
    @DeleteMapping("/{id}")
    public Result<String> deleteBuilding(@PathVariable("id") int id) throws BuildDeleteException {
        boolean flag = iBuildingService.removeBuild(id);
        return flag ? Result.ok() : Result.fail();
    }

    /**
     *    发送请求的路径：  http://localhost:8090/building?id=10
     *        参数在url上面 键值对
     *     直接方法上面的参数的名称和key保持一致就可以
     * @param id
     * @return
     */
//    @DeleteMapping()
//    public String deleteBuilding(int id){
//        System.out.println("id = " + id);
//        return "success";
//    }

    /**
     *    发送请求的路径：  http://localhost:8090/building
     *         请求体的数据: {id:1,name:"zs"}
     *     发送数据过来的是json格式:
     *         把前端json对象转成json字符串、把json字符串转成 javaBean
     *      获取参数的时候:
     *         1、创建一个javabean对象
     *         2、使用注解的方式 @RequestBody 进行自动转换
     * @param id
     * @return
     */
//    @DeleteMapping()
//    public String deleteBuilding(@RequestBody User user){
//        System.out.println("user = " + user);
//        return "success";
//    }

}
